package com.mysterymall.Service;

import com.mysterymall.Common.Utils.Result;
import com.mysterymall.Model.Dto.GoodsDto;
import com.mysterymall.Model.Dto.SelectGoodsDto;

import javax.servlet.http.HttpServletRequest;

/**
 * @ClassName com.mysterymall.Service
 * @Description
 * @Author HuangWX
 * @Time 2023/11/04  00:37
 */
public interface GoodsService {


    /**
     * 新建商品
     *
     * @param goodsDto 商品信息
     * @return Result
     */
    Result addGoods(GoodsDto goodsDto);


    /**
     * 修改商品
     *
     * @param goodsDto 商品信息
     * @return Result
     */
    Result updateGoods(GoodsDto goodsDto);


    /**
     * 查询所有商品 (管理员)
     *
     * @param current 当前页
     * @param size    每页条数
     * @return Result
     */
    Result getAllGoods(Integer current, Integer size);


    /**
     * 根据商品类别查询商品
     *
     * @param goodsTypeId 商品类别ID
     * @return Result
     */
    Result getByTypeList(String goodsTypeId, HttpServletRequest request);


    /**
     * 根据商品删除商品
     *
     * @param id 商品ID
     * @return Result
     */
    Result deleteGoods(String id);


    /**
     * 用户查询商品列表
     *
     * @param page 当前页
     * @return Result
     */
    Result getShopList(Integer page, HttpServletRequest request);


    /**
     * 根据商品ID查询商品详情
     *
     * @param goodsId 商品ID
     * @return Result
     */
    Result getGoodsAttribute(String goodsId, HttpServletRequest request);


    /**
     * 查询单个商品详情
     *
     * @param goodsId 商品ID
     * @return Result
     */
    Result getMonomerGoods(String goodsId);

    /**
     * 用户查询商品详情
     *
     * @param goodsId 商品ID
     * @return Result
     */
    Result getShopGoodsMonomer(String goodsId, HttpServletRequest request);

    /**
     * 模糊查询
     *
     * @param goodsName 商品名称
     * @return Result
     */
    Result fuzzyQuery(String goodsName);

    /**
     * 根据商品类别ID查询商品
     *
     * @return Result
     */
    Result getGoodsTypeGoodsList(SelectGoodsDto selectGoodsDto, HttpServletRequest request);


    /**
     * 根据商品类别查询我的商品  (全部商品,已兑换商品)
     *
     * @param type    商品类别ID
     * @param request 请求头
     * @param current 当前页
     * @param size    每页条数
     * @return Result
     */
    Result getMyUserGoods(String type, HttpServletRequest request, Integer current, Integer size);

    /**
     * 商品兑换
     *
     * @param goodsId 商品ID
     * @return Result
     */
    Result goodsExchange(String goodsId);

}
